/**
 * 简单的 Bun SQLite 示例
 */

import { Database } from 'bun:sqlite';

async function runBunSQLiteExample() {
  console.log('创建 Bun SQLite 数据库...');
  
  // 创建数据库
  const db = new Database(':memory:');
  
  try {
    // 创建表
    db.run(`
      CREATE TABLE IF NOT EXISTS messages (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        content TEXT NOT NULL,
        timestamp INTEGER NOT NULL
      )
    `);
    
    console.log('插入数据...');
    
    // 插入数据
    for (let i = 1; i <= 10; i++) {
      const content = `消息 #${i}`;
      const timestamp = Date.now();
      
      db.run(
        'INSERT INTO messages (content, timestamp) VALUES (?, ?)',
        [content, timestamp]
      );
    }
    
    console.log('查询数据...');
    
    // 查询数据
    const rows = db.query('SELECT * FROM messages').all();
    
    console.log('查询结果:');
    for (const row of rows) {
      console.log(`ID: ${row.id}, 内容: ${row.content}, 时间戳: ${row.timestamp}`);
    }
    
    console.log('\n总共查询到 ' + rows.length + ' 条记录');
    
    // 使用参数查询
    console.log('\n查询 ID > 5 的消息:');
    const filteredRows = db.query('SELECT * FROM messages WHERE id > ?', [5]).all();
    
    for (const row of filteredRows) {
      console.log(`ID: ${row.id}, 内容: ${row.content}, 时间戳: ${row.timestamp}`);
    }
    
    // 更新数据
    console.log('\n更新 ID = 1 的消息:');
    db.run(
      'UPDATE messages SET content = ? WHERE id = ?',
      ['已更新的消息', 1]
    );
    
    // 查询更新后的数据
    const updatedRow = db.query('SELECT * FROM messages WHERE id = ?', [1]).get();
    if (updatedRow) {
      console.log(`ID: ${updatedRow.id}, 内容: ${updatedRow.content}, 时间戳: ${updatedRow.timestamp}`);
    } else {
      console.log('未找到 ID = 1 的记录');
    }
    
    // 删除数据
    console.log('\n删除 ID > 8 的消息:');
    db.run('DELETE FROM messages WHERE id > ?', [8]);
    
    // 查询删除后的数据
    const remainingRows = db.query('SELECT * FROM messages').all();
    console.log('剩余记录:');
    for (const row of remainingRows) {
      console.log(`ID: ${row.id}, 内容: ${row.content}, 时间戳: ${row.timestamp}`);
    }
    
    console.log('\n总共剩余 ' + remainingRows.length + ' 条记录');
    
    // 测试事务
    console.log('\n测试事务:');
    try {
      // 开始事务
      db.exec('BEGIN TRANSACTION');
      
      // 插入新数据
      db.run('INSERT INTO messages (content, timestamp) VALUES (?, ?)', ['事务测试1', Date.now()]);
      db.run('INSERT INTO messages (content, timestamp) VALUES (?, ?)', ['事务测试2', Date.now()]);
      
      // 提交事务
      db.exec('COMMIT');
      console.log('事务提交成功');
    } catch (error) {
      // 回滚事务
      db.exec('ROLLBACK');
      console.error('事务失败，已回滚:', error);
    }
    
    // 查询最终数据
    const finalRows = db.query('SELECT * FROM messages').all();
    console.log('\n最终记录:');
    for (const row of finalRows) {
      console.log(`ID: ${row.id}, 内容: ${row.content}, 时间戳: ${row.timestamp}`);
    }
    
    console.log('\n总共最终 ' + finalRows.length + ' 条记录');
    
  } catch (error) {
    console.error('运行 Bun SQLite 示例时出错:', error);
  } finally {
    // 关闭数据库连接
    db.close();
  }
}

// 运行示例
runBunSQLiteExample().catch(console.error); 